🧩 C Programlamada Dizi (Array) Başlatma Yöntemleri
Bu rehberde, C dilinde dizilerin (arrays) nasıl başlatıldığını farklı yöntemlerle öğreneceksiniz.
Hem klasik {} başlatma yöntemini, hem de GCC’ye özel aralık atama (designated initializer) sözdizimini örneklerle göreceğiz.
Ayrıca, her yöntemin avantajlarını ve dikkat edilmesi gereken hataları de açıklayacağız.
🎯 Bu Rehberde Ne Öğreneceksiniz
- C’de dizilere ilk değer atamanın (initialize) temel yolları
{}başlatıcı listesiyle tam veya kısmi atama yapma- Tüm elemanları sıfıra eşitlemenin kısayolu
- Çok boyutlu dizilerde başlatma mantığı
- for döngüsüyle dinamik değer atama
- GCC’ye özel Atanmış Başlatıcı (Designated Initializer) sözdizimi
1️⃣ Başlatıcı Listeler () Kullanarak Dizi Tanımlama
En yaygın yöntem, diziyi tanımlarken değerleri doğrudan süslü parantez içinde vermektir.
// Boyutu 5 olan dizinin elemanlarına sırasıyla değer atar.
int arr[5] = {1, 2, 3, 4, 5};
➡️ Bu kod, arr[0] = 1, arr[4] = 5 olacak şekilde diziyi doldurur.
A. Eksik Eleman Atama
Bazı elemanları boş bırakabilirsiniz, ancak kalanlar tanımsız (garbage) değer alır:
int arr[5] = {1, 2, 3}; // arr[3] ve arr[4] belirsiz
B. Boyut Belirtmeden Başlatma
Dizi boyutu, eleman sayısına göre otomatik hesaplanır:
int arr[] = {10, 20, 30, 40, 50};
💡 Boyut belirtilmemiş olsa da derleyici 5 eleman olduğunu anlar.
C. Tüm Elemanları Sıfıra Eşitleme
Tüm diziyi 0 yapmak için kısa bir kısayol:
#include <stdio.h>
int main() {
int arr[5] = {0}; // Tüm elemanlar otomatik olarak 0 olur.
for (int i=0; i<5; i++) printf("%d\n", arr[i]);
}
📤 Çıktı:
0
0
0
0
0
D. Çok Boyutlu Dizi Başlatma
C, dizileri bellekte satır satır (row-major) olarak saklar. Bu yüzden çok boyutlu diziler de tek blokla başlatılabilir:
int arr[3][3] = {1,2,3,4,5,6,7,8,9};
📤 Çıktı:
1
2
3
4
5
6
7
8
9
2️⃣ for Döngüsüyle Dinamik Dizi Başlatma
Bu yöntem, dinamik veya hesaplanan değerlerle dizi doldurmak için kullanılır.
#include <stdio.h>
int main() {
int arr[5];
for (int i=0; i<5; i++)
arr[i] = i * 2; // Her elemana dizin*2 değeri atanır.
for (int i=0; i<5; i++)
printf("%d\n", arr[i]);
}
📤 Çıktı:
0
2
4
6
8
💡 Döngüyle dizi başlatmak, kullanıcı girdisine veya hesaplama sonucuna göre değer atamak için idealdir.
3️⃣ Designated Initializers (Atanmış Başlatıcılar – GCC)
Bu yöntem yalnızca GCC/Clang derleyicilerinde desteklenir. Belirli dizin aralıklarına tek satırda aynı değeri atamayı sağlar.
A. Aralık Atama
#include <stdio.h>
int main() {
// 0’dan 8’e kadar tüm elemanlara 10 atanır.
int arr[9] = { [0 ... 8] = 10 };
for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
}
📤 Çıktı:
10
10
10
10
10
10
10
10
10
B. Liste ve Aralık Atamasını Birleştirme
Bireysel atama ve aralık atamasını aynı anda kullanabilirsiniz:
#include <stdio.h>
int main() {
// arr[0]=0, arr[8]=0, [1...7] aralığı = 10
int arr[9] = { 0, [1 ... 7] = 10, 0 };
for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
}
📤 Çıktı:
0
10
10
10
10
10
10
10
0
⚠️ Dikkat: Bu sözdizimi yalnızca GCC veya Clang gibi GNU tabanlı derleyicilerde çalışır. Visual Studio bu biçimi desteklemez.
⚖️ Dizi Başlatma Yöntemleri – Özet Tablo
| Yöntem | Açıklama | Avantaj | Destek |
|---|---|---|---|
Başlatıcı Liste {} | Elemanları sıralı şekilde atar | Basit ve hızlı | Tüm derleyiciler |
| 0 ile Başlatma | Tüm elemanları 0 yapar | Kısa ve temiz | Tüm derleyiciler |
| for Döngüsü | Dinamik, hesaplanabilir değerler | Esnek | Tüm derleyiciler |
| Designated Initializer | Aralık ataması yapar | Gelişmiş kullanım | Sadece GCC/Clang |
| Çok Boyutlu Başlatma | Satır bazlı dizilerde kolaylık sağlar | Düzenli yapı | Tüm derleyiciler |
❓ Sıkça Sorulan Sorular (SSS)
1️⃣ Dizi başlatılmazsa ne olur?
Başlatılmayan diziler, bellekteki rastgele (garbage) değerleri içerir. Bu, hatalara neden olabilir.
2️⃣ 0 neden yalnızca sıfır için geçerli?
C standardına göre eksik elemanlar varsayılan olarak 0 kabul edilir. 0 ilk elemanı sıfırlar, kalanlar da otomatik 0 olur.
3️⃣ Designated initializer tüm derleyicilerde çalışır mı?
Hayır. [0 ... 8] aralık sözdizimi GCC ve Clang’a özgüdür. Visual Studio’da hata verir.
4️⃣ char dizileri nasıl başlatılır?
char s1[6] = {'H','E','L','L','O','\0'};
char s2[] = "HELLO"; // Otomatik '\0' eklenir
5️⃣ En güvenli yöntem hangisidir?
Statik dizilerde kullanmak en güvenlisidir. Dinamik değerlerde ise for döngüsü tercih edilir.
🚀 Sonuç
Artık C dilinde dizi başlatma yöntemlerinin tamamını biliyorsun:
klasik yöntem
0 sıfırlama
for döngüsüyle dinamik atama
GCC Designated Initializer ile aralık başlatma
Bu bilgileri kullanarak kodlarını daha temiz ve taşınabilir hale getirebilirsin.
💡 Geliştirdiğin C uygulamalarını Rabisu Bulut Platformu üzerinde test ederek gerçek sunucu ortamında performanslarını gözlemleyebilirsin.